package com.jmb.demo.simple;
// 一个简单的泛型类
// 这个Pair他就是一个泛型类，然后我们可以得到他后边多了一个<T>,尖括号T，然后first,second这两个他们的类型就是T了
// T是啥意思，T就是要给类型参数，一个类型参数化，可以理解，我们传给他是什么，他就是什么，所以他不是固定的、
public class Pair<T, S>{
    T first;
    S second;
    public Pair(T first,S second){
        this.first=first;
        this.second=second;
    }
    public T getFirst(){
        return first;
    }
    public S getSecond(){
        return second;
    }
    // 下边就是使用我们的泛型类，给他传递类型的参数
    public static void main(String[] args) {
        // Integer是我们的一个包装类
//        Pair<Integer> pair = new Pair<>(1, 100);
        // 我们来获取一下打印结果
//        System.out.println(pair.getFirst());
//        System.out.println(pair.getSecond());
        /**
         * Pair<Integer>中的Integer就是传递的实际类型参数。
         * Pair类的代码和它处理的数据类型不是绑定的，具体类型可以变化
         * 比如下边，我们可以用一个Integer和String字符串
         * 但是切记，Idea会强制让我们把我们原先写的，Pair<T,T>，会改成Pair<T,S>，这样来区分我们的不同泛型情况。
         * 我们还可以采用同样类型的，比如Integer变成String
         */
       Pair<Integer,String> pair= new Pair<Integer,String>(24,"金梦博");
       // 获取结果和我们输入的内容一样。
        System.out.println(pair.getFirst());
        System.out.println(pair.getSecond());
        /**
         不过我们可以从上个例子看到，<Integer, String>既出现在了声明变量时，也出现在了new后面，比较烦琐。
         从Java 7开始，支持省略后面的类型参数，比如下个例子那样使用
         */
        Pair<Integer,String> pair1 = new Pair<>(25,"金天");
        System.out.println(pair1.getFirst());
        System.out.println(pair.getSecond());


    }
}
